/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	spi.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-06-21
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/

#ifndef _SPI_H_
#define _SPI_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "stm32h7xx_hal.h"
#include "bsp_conf.h"
/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/


typedef enum{
	SPI_ERR_NONE,
	SPI_ERR_OPEN,
	SPI_ERR_CLOSE,
	SPI_ERR_READ,
	SPI_ERR_WRITE,
	SPI_ERR_TRANS,
	SPI_ERR_FORM,
	SPI_ERR_OCCUPIED,
}spi_err_t;

typedef struct SPI_HANDLE{
	SPI_HandleTypeDef spi_hal_handle;
	
	DMA_HandleTypeDef spi_dma_tx_handle;
	DMA_HandleTypeDef spi_dma_rx_handle;
	
	uint8_t * txbuff;
	uint8_t * rxbuff;
	
	uint16_t txsize;
	uint16_t rxsize;
	
	void (*spi_dma_callback)(struct SPI_HANDLE * ,uint8_t * rxbuff, uint16_t size);
	
}spi_handle_t;

typedef void (*spi_dma_callback)(spi_handle_t * ,uint8_t * rxbuff, uint16_t size);
/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/
spi_handle_t*  spi_open(SPI_TypeDef * spi);

spi_err_t  spi_close(SPI_TypeDef * spi);

spi_err_t  spi_write(spi_handle_t* handle, uint8_t* buf, uint16_t size);

spi_err_t  spi_read(spi_handle_t* handle, uint8_t* buf, uint16_t size);

spi_err_t  spi_transfer_receive(spi_handle_t* handle, uint8_t* txbuff,uint8_t * rxbuff,uint16_t size);

spi_err_t	spi_dma_init(spi_handle_t* spi_handle,spi_dma_callback callback);

spi_err_t spi_dma_transfer(spi_handle_t*,uint8_t * txbuff,uint8_t * rxbuff,uint16_t size);

uint8_t 	spi_transfer_byte(spi_handle_t*,uint8_t txbyte);
#endif
